package mtest3.day1;

public class SequenceList<E> implements IList<E> {
    // alt +enter 生成接口方法
    // 声明数组
    E[] data;
    // 声明数组长度
    int len;

    // 创建构造函数
    public SequenceList(int count) {
        // 创建count大小的数组
        this.data = (E[]) new Object[count];
        // 初始化长度为0
        len = 0;

    }


    /**
     * 数组最后一位添加
     *
     * @param e 要添加的元素
     */
    @Override
    public void add(E e) {
        this.insert(len, e);

    }

    /**
     * 指定位置添加数据
     *
     * @param index 下标
     * @param e     要添加的元素
     */
    @Override
    public void insert(int index, E e) {
        // 1.判断e 不能为空
        if (e == null) {
            throw new NullPointerException("元素不能为空");
        }
        // 2. 判断下标不能越界
        if (index < 0 || index > len) {
            throw new IndexOutOfBoundsException("索引超出范围");
        }
        // 3 判断数组时候已经存满
        if (len == data.length) {
            throw new RuntimeException("数组已满");
        }
        // 4 添加数据到数组
        // int i =len -l 当前数组的最后一位下标
        // [1,2,3,4,] 0, 1,2,3  length = 4
        for (int i = len - 1; i >= index; i--) {
            // 向后挪一位，添加
            this.data[i + 1] = this.data[i];
        }
        // 添加新的数据到指定位置
        this.data[index] = e;
        // 长度加一
        len++;

    }

    @Override
    public void remove(int index) {
        for(int i = index;i < len;i++){
            this.data[i] =this.data[i+1];
        }
        this.len--;

    }

    @Override
    public void set(int index, E e) {

    }

    @Override
    public E get(int index) {
        return null;
    }

    @Override
    public int size() {
        return 0;
    }

    @Override
    public boolean isEmpty() {
        return false;
    }

    @Override
    public int indexOf(E e) {
        return 0;
    }

    public void show() {
        for (E x : this.data) {
            System.out.println(x);

        }
    }

}
